package com.hadooop.partitioner;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Partitioner;

/*
Partitioner: 分区器，可以将map方法输出的键值对，按照指定的规则进行分区
泛型，对应的是map方法输出的键值对的类型
 */
public class WordCountPartitioner extends Partitioner<Text, IntWritable> {
    /*
    每一个map方法输出的键值对，都会调用这个方法，来确定分区号
    @param text 键
    @param intWritable 值
    @param i ReduceTask的数量
    @return 分区号，需要从0开始，且是连续的
     */
    @Override
    public int getPartition(Text text, IntWritable intWritable, int i) {
        // 获取键的首字母
        char ch = text.toString().charAt(0);
        // 按首字母进行分区
        if (ch >= 'a' && ch <= 'i') {
            return 0;
        } else if (ch >= 'j' && ch <= 'z') {
            return 1;
        } else {
            return 2;
        }
    }
}
